package cn.edkuir.order.service.impl;

import cn.edkuir.order.entity.OrderEntity;
import com.rabbitmq.client.Channel;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Service;

import java.io.IOException;
import java.util.Map;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import cn.edkuir.common.utils.PageUtils;
import cn.edkuir.common.utils.Query;

import cn.edkuir.order.dao.OrderItemDao;
import cn.edkuir.order.entity.OrderItemEntity;
import cn.edkuir.order.service.OrderItemService;


@Service("orderItemService")
public class OrderItemServiceImpl extends ServiceImpl<OrderItemDao, OrderItemEntity> implements OrderItemService {

    @Override
    public PageUtils queryPage(Map<String, Object> params) {
        IPage<OrderItemEntity> page = this.page(
                new Query<OrderItemEntity>().getPage(params),
                new QueryWrapper<OrderItemEntity>()
        );

        return new PageUtils(page);
    }


    /**
     * 1. Message message: 原生消息对象, 头 + 体
     * 2. T<发送的消息内容> OrderEntity orderEntity: 自动转化
     * 3. Channel channel: 当前传输数据的通道
     *
     * Queue 可以很多人监听, 只要收到消息, 队列就会删除消息, 只能一个人收到消息
     * 1) 多个服务, 同一个消息, 只有一个客户端能收到
     * 2) 只有一个消息完全处理完, 方法运行结束, 第二个消息才能被收到
     */
    @RabbitListener(queues = {"hello-java-queue"})
    public void receiveMessage(Message message, OrderEntity orderEntity, Channel channel) {
        System.out.println("接受到的消息: " + message);
        try {
            channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
        } catch (IOException e) {
            //网络中断
            e.printStackTrace();
        }
    }

}